package com.yoso.starter.boot.vo;

import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Data
@Accessors(chain = true)
public class CustomTable {

    /**
     * 表头行
     */
    private List<TableHead> tableHeadList;

    /**
     * 内容行
     */
    private List<Map<String, Object>> tableLineList;

    /**
     * 表头
     * @author shizejin
     * @date 2024/01/12 17:40
     */
    @Data
    @Accessors(chain = true)
    public static class TableHead {

        /**
         * 编码
         */
        private String code;

        /**
         * 名称
         */
        private String name;

        /**
         * 表格的长度
         */
        private Integer length;

        /**
         * 标签
         */
        @JsonIgnore
        private String label = "common";

    }

    @Data
    @Accessors(chain = true)
    public static class TableLine {

        /**
         * 行id
         */
        @JsonIgnore
        private String lineId;

        /**
         * 列值
         */
        private List<TableValue> tableValueList;

        public Map<String, Object> convert2Map() {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("id", lineId);
            if (CollUtil.isNotEmpty(tableValueList)) {
                tableValueList.forEach(v -> map.put(v.getTableHead().getCode(), v.getValue()));
            }
            return map;
        }

    }

    /**
     * 列值
     * @author shizejin
     * @date 2024/01/15 09:45
     */
    @Data
    @Accessors(chain = true)
    public static class TableValue {

        /**
         * 横坐标
         */
        @JsonIgnore
        private String lineId;

        /**
         * 纵坐标
         */
        private TableHead tableHead;

        /**
         * 表格的值
         */
        private Object value;

    }
}
